home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
9-Digit Zip Code Directory
/
9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO
/
z4src.zip
/
ZIZ5.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-09
|
11KB
|
369 lines
//----------------------------------------------------------------------------
// MODULE DESCRIPTION
//
// Module: ziz5.cpp
// Title: 9 Digit ZIP Disc Interface
// Notice: John M. Weeder
// Copyright (c) 1993. All rights reserved.
// This module contains proprietary information and should be
// treated as confidential.
//
//----------------------------------------------------------------------------
// MAINTENANCE HISTORY
//
// $Workfile$
// $Revision$
// $Author$
// $Date$
// $Log$
//
//----------------------------------------------------------------------------
// MODULE NARRATIVE
//
// This module contains code for the class ZI_Z5.
//
// The code in this module may be written in C++ or C.
//
// This module is portable to:
// DOS 3.X+
// MS Windows 3.X+
// OS/2 2.X+
// OS/2 2.0 PM
//
// The following compilers are supported:
// MSC 6.0A
// MSC/C++ 7.0
// Borland C++ 3.1 for DOS
// Borland C++ 1.0 for OS/2 2.X
//
//----------------------------------------------------------------------------
#include <zi.hpp>
#define USE_WIN_Z5
#if OS_DOS
#include <zid.hpp>
#elif OS_WINDOWS
#include <ziw.hpp>
#else
#include <zio.hpp>
#endif
//----------------------------------------------------------------------------
// Description: Default constructor
// Parameters:
// Returns:
//----------------------------------------------------------------------------
FN_M ZI_Z5::ZI_Z5(PCSZ _pcszZip5)
: ZN_WINDOW("WIN_Z5", ZN_LOAD_CENTER|ZN_LOAD_HELPBAR|ZN_LOAD_NO_SHOW)
{
ZI_Z5::Initialize(CL_INIT_CLASS);
pcszZip5 = _pcszZip5;
Setup();
}
//----------------------------------------------------------------------------
// Description: Destructor
// Parameters:
// Returns:
//----------------------------------------------------------------------------
FN_M ZI_Z5::~ZI_Z5()
{
ZI_Z5::Destroy(FALSE);
Terminate();
}
//----------------------------------------------------------------------------
// Description: This function attempts to make a partial match to a state
// name and place the virtual list selector on that state.
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
VOID FN_M ZI_Z5::BestCity()
{
Z4_CS csNext;
if (!Z4_INQ::cs_file.Record(Z4_INQ::cs, Z4_INQ::z5.arecid[0]))
return ;
for (SIZET i = 1; i < Z4_INQ::z5.cCities && Z4_INQ::cs.facility != Z4_FACILITY_PO; ++i)
{
if (!Z4_INQ::cs_file.Record(csNext, Z4_INQ::z5.arecid[i]))
return ;
if (csNext.facility < Z4_INQ::cs.facility)
Z4_INQ::cs = csNext;
}
return ;
}
//----------------------------------------------------------------------------
// Description: This function attempts to make a partial match to a state
// name and place the virtual list selector on that state.
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
VOID FN_M ZI_Z5::CheckMatch()
{
PCSZ pcsz = GetString(FID(STR_SEARCH));
if (pcsz && fInit)
{
CHAR szWork[80];
PSZ psz1;
PCSZ psz2;
psz1 = szWork;
psz2 = pcsz;
for (; psz2[0]; ++psz2)
if (isascii(psz2[0]) && isdigit(psz2[0]))
*psz1++ = *psz2;
*psz1 = '\0';
if (stricmp(szLastMatch, szWork) == 0)
return ;
strcpy(szLastMatch, szWork);
if (strlen(szLastMatch) > 5)
return ;
if (!Z4_INQ::z5_file.First(Z4_INQ::z5, szLastMatch))
return ;
SetVlistPos((LONG)Z4_INQ::z5_file.RecordNo());
SetCurrent(FID(STR_SEARCH));
}
return ;
}
//----------------------------------------------------------------------------
// Description: Display detail windows
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_Z5::Detail()
{
if (!Z4_INQ::z5_file.Record(Z4_INQ::z5, lCurrent))
return FALSE;
if (Z4_INQ::z5.cCities == 1)
{
if (!Z4_INQ::cs_file.Record(Z4_INQ::cs, Z4_INQ::z5.arecid[0]))
return FALSE;
PZI_CS_DETAIL pzi_cs_detail = new ZI_CS_DETAIL(Z4_INQ::cs);
if (pzi_cs_detail == NULL)
return ErrorNoMem();
else if (pzi_cs_detail->IsValid())
pzi_cs_detail->Show();
return TRUE;
}
PZI_CS_LIST pzi_cs_list = new ZI_CS_LIST(Z4_INQ::z5.cCities, Z4_INQ::z5.arecid, Z4_INQ::z5.szZip5);
if (pzi_cs_list == NULL)
return ErrorNoMem();
else if (pzi_cs_list->IsValid())
pzi_cs_list->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Destroy object. Free any resources used by object.
// Normally called by destructor.
// Should allow multiple calls from various classes.
// A class should almost always re-init its variables when
// it is destroyed to prevent accidents.
// Parameters: fDestroyAll Destroy parents also?
// Default is TRUE.
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_Z5::Destroy(BOOL fDestroyAll)
{
ZI_Z5::Initialize(CL_INIT_CLASS_VARS);
if (fDestroyAll) // Destroy parent.
ZI_Z5_PARENT::Destroy(fDestroyAll);
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Initialize object.
// Normally called by constructor.
// Should allow multiple calls from various classes.
// Parameters: sInit Initialization code. May be one of the following:
// CL_INIT_CLASS Reset class variables and
// and dynamic allocations for
// this class only.
// CL_INIT_CLASS_VARS Reset class variables for
// this class only.
// CL_INIT_VARS Reset class variables for
// this class only.
// CL_INIT_ALL Initialize class and all
// parent class, including
// dynamic memory allocation.
// Default is CL_INIT_ALL
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_Z5::Initialize(SHORT sInit)
{
if (sInit == CL_INIT_VARS || sInit == CL_INIT_ALL)
ZI_Z5_PARENT::Initialize(sInit);
szLastMatch[0] = '\0';
lCurrent = 0;
lRecords = 0;
fInit = FALSE;
pcszZip5 = NULL;
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_Z5::Query(PZN_VLIST_ELEM pzn_vlist_elem)
{
pzn_vlist_elem->pszBuf = szFormat;
szFormat[0] = '\0';
if (!Z4_INQ::z5_file.Record(Z4_INQ::z5, pzn_vlist_elem->lId))
return FALSE;
BestCity();
sprintf(szFormat, "\t%s\t%s\t%s",
Z4_INQ::z5.szZip5,
Z4_ST_FILE::Abbreviation(Z4_INQ::cs.state),
Z4_INQ::cs.szCity);
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_Z5::Select()
{
if (!Z4_INQ::z5_file.Record(Z4_INQ::z5, lCurrent))
return FALSE;
SendMessage(ZiMainWindow(), ZI_MSG_ZIP5, NULL, (PVOID)Z4_INQ::z5.szZip5);
if (Z4_INQ::z5.cCities > 1)
{
SendMessage(ZiMainWindow(), ZI_MSG_STATE, NULL, (PVOID)NULL);
SendMessage(ZiMainWindow(), ZI_MSG_CITY, NULL, (PVOID)NULL);
}
else
{
if (Z4_INQ::cs_file.Record(Z4_INQ::cs, Z4_INQ::z5.arecid[0]))
{
SendMessage(ZiMainWindow(), ZI_MSG_STATE, NULL, (PVOID)Z4_ST_FILE::Abbreviation(Z4_INQ::cs.state));
PCSZ pcszCity = (Z4_INQ::cs.facility == Z4_FACILITY_OTHER ? Z4_INQ::cs.szLastLineName: Z4_INQ::cs.szCity);
SendMessage(ZiMainWindow(), ZI_MSG_CITY, NULL, (PVOID)pcszCity);
}
}
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Event monitor function.
// Parameters: msg Event code
// pv1 Data pointer 1
// pv2 Data pointer 2
// Returns: Event code
//----------------------------------------------------------------------------
ZN_MSG FN_M ZI_Z5::User(ZN_MSG msg, PVOID, PVOID pv2)
{
switch (msg)
{
case ZN_MSG_INIT:
fInit = TRUE;
if (pcszZip5)
{
SetString(FID(STR_SEARCH), pcszZip5);
CheckMatch();
}
SetCurrent(FID(STR_SEARCH));
return msg;
case ZN_MSG_TERMINATE:
return msg;
case ZN_MSG_VLIST_INIT:
{
static int aiTabstops[] = { 2, 9, 13, 0, 0 };
PZN_VLIST_INIT pzn_vlist_init = (PZN_VLIST_INIT)pv2;
pzn_vlist_init->lElems = lRecords = (LONG)Z4_INQ::z5_file.Records();
pzn_vlist_init->fs = ZN_VLIST_SINGLE|ZN_VLIST_TITLE;
pzn_vlist_init->aiTabstops = aiTabstops;
}
return msg;
case ZN_MSG_VLIST_TITLE:
{
PZN_VLIST_ELEM pzn_vlist_elem = (PZN_VLIST_ELEM)pv2;
pzn_vlist_elem->pszBuf = szFormat;
strcpy(szFormat, "\tZIP\tST\tPreferred City Name");
}
return msg;
}
if (IsError()) // Error condition
return msg;
switch (msg)
{
case ZN_MSG_STRING_CHANGE:
CheckMatch();
break;
case ZN_MSG_VLIST_QUERY:
Query((PZN_VLIST_ELEM)pv2);
break;
case ZN_MSG_VLIST_SELECT:
{
PZN_VLIST_ELEM pzn_vlist_elem = (PZN_VLIST_ELEM)pv2;
lCurrent = pzn_vlist_elem->lId;
}
// Fall through
case ZN_MSG_VLIST_CURRENT:
{
PZN_VLIST_ELEM pzn_vlist_elem = (PZN_VLIST_ELEM)pv2;
LONG lRec = pzn_vlist_elem->lId;
sprintf(szFormat, "ZIP %ld of %ld", lRec+1, lRecords);
SetHelp(szFormat);
}
break;
case ZN_MSG_VLIST_DBL_CLK:
{
PZN_VLIST_ELEM pzn_vlist_elem = (PZN_VLIST_ELEM)pv2;
lCurrent = pzn_vlist_elem->lId;
}
// Fall through
case TB_DETAIL:
Detail();
break;
case ZN_MSG_HELP:
return ZN_MSG_NO_HELP;
case TB_CLOSE:
Close();
break;
case TB_SELECT:
Select();
Close();
break;
case TB_HELP:
NotDone();
break;
}
return msg;
}
//----------------------------------------------------------------------------
//------------------------------- End of File --------------------------------
//----------------------------------------------------------------------------